﻿/*****************************************************
**Copyright(C), 2021-2022, Ciqtek Technology.
**Version:     dev
**Author:      MiPeng
**Date:        2021/12/14
**Description: 十字均衡器，支持右键映射全屏, 默认大小135x135
*****************************************************/

#ifndef CROSSEQ_H
#define CROSSEQ_H

#include "../generalui_global.h"
#include "../GlobalUIDef.h"

#include "../Widgets/UiWidgetBase.h"

#include <QLabel>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QPushButton>

namespace GeneralUI {

	class CrossEQItem;
	class GENERALUI_EXPORT CrossEQ : public UiWidgetBase
	{
		Q_OBJECT

	public:
		/**
		 * @brief  CrossEQ  默认构造函数
		 * @param  parent
		 * @return
		 */
		explicit CrossEQ(QWidget *parent = nullptr);

		/**
		 * @brief  ~CrossEQ  默认析构函数
		 * @return
		 */
		~CrossEQ();

	public:
		/**
		 * @brief  setFixedSize  设置组件大小
		 * @param  width  宽度
		 * @param  height  高度
		 * @return void
		 */
		void setFixedSize(int width, int height);

		/**
		 * @brief  setDecimals  设置设置精度
		 * @param  decs
		 * @return void
		 */
		void setDecimals(int decs);

		/**
		 * @brief  setValue  设置当前值
		 * @param  valueX  X方向值
		 * @param  valueY  Y方向值
		 * @return void
		 */
		void setValue(double valueX, double valueY);

		/**
		 * @brief  getValue  获取当前值
		 * @param  valueX  X方向值
		 * @param  valueY  Y方向值
		 * @return QPoint
		 */
		QPointF getValue();

		/**
		 * @brief  setText  设置文本
		 * @param  horText  水平文本
		 * @param  verText  垂直文本
		 * @return void
		 */
		void setText(QString horText, QString verText);

		/**
		 * @brief  setFont  设置文本字体
		 * @param  font  字体
		 * @return void
		 */
		void setFont(QFont &font);

		/**
		 * @brief  setShowText  设置展示文本
		 * @param  isShowText
		 * @return void
		 */
		void setShowText(bool isShowText);

		/**
		 * @brief  isShowText  获取是否展示文本
		 * @return bool
		 */
		bool isShowText();

		/**
		 * @brief  setRange  设置最值
		 * @param  min  最小值
		 * @param  max  最大值
		 * @return void
		 */
		void setRange(double min, double max);

		/**
		 * @brief  setRange  设置最值
		 * @param  xMin  X最小值
		 * @param  xMax  X最大值
		 * @param  yMin  Y最小值
		 * @param  yMax  Y最大值
		 * @return void
		 */
		void setRange(double xMin, double xMax, double yMin, double yMax);

		/**
		 * @brief  setPixStep  设置鼠标左键移动灵敏度
		 * @param  step  灵敏度-鼠标移动step时，线条移动1像素
		 * @return void
		 */
		void setPixStep(double step);

		/**
		 * @brief  setBtnStyleSheet  设置按钮样式
		 * @param  styleSheet
		 * @return void
		 */
		void setBtnStyleSheet(QString styleSheet);

		/**
		 * @brief  setStyleSheet  组件样式设置
		 * @param  styleSheet
		 * @return void
		 */
		 //void setStyleSheet(QString &styleSheet);

		 /**
		  * @brief  hasFocus 是否有焦点
		  * @return bool
		  */
		bool hasFocus()override;

		/**
		 * @brief  blockSignals 屏蔽信号
		 * @param  block
		 * @return bool
		 */
		bool blockSignals(bool block)override;

		/**
		 * @brief  setEnabled  设置是否启用
		 * @param  isEnable
		 * @return void
		 */
		void setEnabled(bool isEnable)override;

	Q_SIGNALS:
		/**
		 * @brief  signalValueChange  数据变化信号
		 * @param  valueX  X方向数据
		 * @param  valueY  Y方向数据
		 * @return void
		 */
		void signalValueChange(double valueX, double valueY);

		/**
		 * @brief  signalResetBtnClicked  重置按钮点击
		 * @param  isChecked
		 * @return void
		 */
		void signalResetBtnClicked(bool isChecked);

		/**
		 * @brief  signalEditingFinished  编辑完成信号
		 * @param  value
		 * @return void
		 */
		void signalEditingFinished(QPointF value);

	private:
		/**
		 * @brief  initUI  初始化UI
		 * @return void
		 */
		void initUI();

	private:
		/** 束对中组件Item
		 */
		CrossEQItem *m_corssEQItem;

		/** View
		 */
		QGraphicsView *m_view;

		/** 场景
		 */
		QGraphicsScene *m_scene;

		/**  下方文本
		 */
		QLabel *m_bottomMsgLabel;

		/**  右侧文本
		 */
		QLabel *m_rightMsgLabel;

		/**  重置按钮
		 */
		QPushButton *m_resetBtn;

		/**  展示文本
		 */
		bool m_isShowText;
	};

}//namespace OfUI

#endif // CROSSEQ_H
